# 定义函数打印菜单：
def print_menu():
    print("==========功能菜单==========")
    print("【1】:添加图书")
    print("【2】:删除图书")
    print("【3】:查找图书")
    print("【4】:显示所有图书")
    print("【5】:修改图书信息")

# 函数调用
print_menu()
print_menu()

print("=" * 50)
# 定义形参数
# 必需参数
def add_number(a, b):
    print("a的值：", a)
    print("b的值：", b)

# 必需参数在调用时一定要传参
add_number(1, 2)

print("=" * 50)
# 默认参数
def add_number2(a, b=0):
    print("a的值：", a)
    print("b的值：", b)

# 默认参数可以传可不传，不传时则使用定义时默认值
add_number2(1)
add_number2(1, 2)

print("=" * 50)

def func1(a,b,*args,**kwargs):
    print("a的值：", a)
    print("b的值：", b)
    print("args的值：", args)
    print("kwargs的值：", kwargs)

func1(1,2,33,44,55, name="张三", age=18)

print("=" * 50)
def func2(a,b,c,d, *args,**kwargs):
    print("a的值：", a)
    print("b的值：", b)
    print("c的值：", c)
    print("d的值：", d)
    print("args的值：", args)
    print("kwargs的值：", kwargs)

# 实参，按位置进传参，多出来的参数会保存到args当中，args是位置参数
func2(1,2,3,4,5,6,7,8)
print("=" * 50)
# 实参，按关键字传参，多出来的参数会保存到kwargs当中，kwargs是关键字参数
func2(a=1,b=2,c=3,d=4,e=5,f=6)

print("=" * 50)
# 定义函数时指定函数的参数类型
def func3(name:str, age:int):
    print("name的值：", name)
    print("age的值：", age)

# 函数调用
func3("张三", 18)

print("=" * 50)
def add(a:int, b:int)->int:
    return a + b

# 调用函数后使用result接收函数的返回值
result = add(1, 2)
print(result)

print("=" * 50)
# 声明函数的文档字符串
def full_name(first_name, last_name):
    """
    获取完整的姓名
    :param first_name: 名字
    :param last_name: 姓氏
    :return: 完整的姓名
    """
    return f"{first_name} {last_name}"

print(full_name.__doc__)
print("===")
print(help(full_name))


